#include "mystdio.h"
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdilb.h>
#include <unistd.h>


static MyFile *BuyFile()
{
	MyFile *f = (Myfile*)malloc(sizeof(MyFile));
	if(f == NULL) return NULL;
	f->bufferlen = 0;
	f->fileno = fd;
	f->flag = flag;
	f->flush_method = LINE_FLUSH;

	memset(f->outbuffer,0,sizeof(f->outbuffer));

	return f;
}

MyFile *MyFopen(const char *path,const char * mode)
{
	int fd = -1;
	int flag =0;
	if(strcmp(mode,"w")==0)
	{
		flag = O_CREAT | O_WRONLY | O_TRUNC;
		fd = open (path,flag ,0666);

	}
	else if(strcmp(mode,"a")== 0)
	{
		flag = O_CREAT | O_WRONLY | O_APPEND;
		fd  = open(path,flag,0666);

	}
	else if (strcmp(mode,"r")==0)
	{
		flag = O_RDWR;
		fd = open(path,flag);

	}
	else
	{
		//TODO
	}
	if(fd < 0) return NULL;
	
	return BuyFile(fd,flag);

}

void MyFclose(MyFile *)
{

}

int MyFwrite(MyFile *file,void *str,int len)
{
	//1.拷贝
	memcpy(file->outbuffer+file->bufferlen,str,len );
	file->bufferlen += len;

	//2.尝试判断是否满足刷新条件！
	if((file -> flush_method & LINE_FLUSH)&& file->outbuffer[file ->bufferlen-1]== '\n' )
	{
		MyFFlush(file);
	}
	//
	return 0;

}

void MyFFlush(MyFile *file)
{
	int n = write(file->fileno,file -> outbuffer,file->bufferlen);
	(void )n;
	file ->bufferlen = 0;

}
